﻿--变量
--全局变量:只读，由系统定义和维护, @@
--@@error
--@@identity
--局部变量: 声明(int a)，赋值(a = 1)
--declare 变量名 数据类型

--1.声明一个变量
declare @a varchar(20)

--2.赋值
--2.1 set
--set @a = 2
--2.2 select

--select @a = (select sname from Student where sid=05)
select @a = sname from Student

--set , select 
--1.set一般用直接赋值，select 一般用从已有数据表查询出来得数据赋值
--2.当返回的数据有多行时，使用set 会报错， select返回最后一行数据

--print:打印  Java  'a=' + a
print 'a=' + convert(varchar(10),@a)
print 'a=' + cast(@a as varchar(10))


use DBSTUDENT
go

select * from StuInfo
select * from StuScore

--查找李的前后桌
declare @stuno int

--将学号存入stuno
select @stuno = stuid from stuinfo where stuname='李雅芸'

select * from stuinfo where StuID in ((@stuno - 1),(@stuno+1))

--if ... else ...
--
declare @stusex varchar(20)

--将学号存入stuno
select @stusex = StuSex from stuinfo where stuname='李雅芸'

if (@stusex = '男')

begin
	print '男神'
end

else if (@stusex = '女')
begin
	print '女神'
end
else
begin
	print '保密'
end


select * from StuInfo
select * from StuScore
--统计分析本班男生的平均成绩和女生的平均成绩，如果男生的平均成绩高于女生则输出“男生成绩优于女生”，
--并显示男生第一名的信息。否则输出“女生成绩优于男生”，并显示女生第一名的信息
declare @mavg int, @feavg int
declare @sscore int
select @mavg = (select avg(score) from StuScore join StuInfo on StuInfo.StuID=StuScore.StuID where StuSex='男')
select @feavg = (select avg(score) from StuScore join StuInfo on StuInfo.StuID=StuScore.StuID where StuSex='女')

if @mavg > @feavg  --男生平均成绩比较高
begin
	print '男生平均成绩高'    -- 男生第一名：
	select @sscore = (select top 1 sum(score) from StuScore join StuInfo on StuInfo.StuID=StuScore.StuID 
	where stusex = '男' group by stuinfo.StuID order by sum(score) desc)
end

else
	print '女生平均成绩高'




--累加：  1+...+10

--while：循环控制语句
--continue: 跳过当前循环
--break: 跳出整个循环

--while (条件)
--begin
--end
declare @i int = 0, @sum int = 0
while (@i<=10)
begin
    set @i = @i + 1   --跳出条件
	if ((@i%2) = 0)
		begin
			continue
		end

   --
	set @sum += @i
	
end

print @sum


use studenttest
go





--代表一个语句结束


--将StuScore成绩表中的学生成绩用五分制显示。
--				5分：80分以上
--​				4分：60～79分
--​				3分：40～59分
--​				2分：20～39分
--​				1分：0～19分
SELECT TOP 1000 [StuID]
      ,[StuSex]
      ,[Chinese]
      ,[English]
      ,[Math]
  FROM [studenttest].[dbo].[StuScore]

select stuid,English, 
case
	when English between 1 and 19 then 'E'
	when English between 20 and 39 then 'D'
	when English between 40 and 59 then 'C'
	when English between 60 and 79 then 'B'
	else 'A'
end  as [English_Rank],
Math,
case
	when Math between 1 and 19 then 'E'
	when Math between 20 and 39 then 'D'
	when Math between 40 and 59 then 'C'
	when Math between 60 and 79 then 'B'
	else 'A'
end  as [Math_Rank]

from StuScore


print '蜗牛' + CHAR(9) + '01'


--批处理语句：go
--1. 每执行完一条语句 会自动结束当前事务
--2. 块作用域


go
	declare @i int = 1
	
go
print @i

use BankTest
go

select * from AccountInfo  --个人信息表：opentime:开户时间
select * from BankCard  -- 银行卡信息 1,2,3,4分别转换为汉字“正常,挂失,冻结,注销
select * from CardExchange  --交易记录： moneyinbank：进账 exchangetime:交易时间
select * from CardTransfer  --转账记录：CardNoout:转出账号
